package com.bestcem.xm.member.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * @author dc.wang <dc.wang@idiaoyan.com>
 * @version V1.0
 * @date 2022/2/16 14:30
 */
public interface MemberUserGroupService {
    /**
     * 查询用户组织
     *
     * @param userId 用户id
     * @return 用户组织id集合
     */
    ServiceResult<Collection<String>> userGroupIds(String userId);

    /**
     * 全量刷新企业
     *
     * @param orgId 企业id
     * @return errorMsg
     */
    ServiceResult<String> flush(String orgId);

    /**
     * 校验用户组织层级权限
     *
     * @param userId  用户id
     * @param groupId 组织id
     * @return true : 组织层级不存在、禁用、删除、隐藏、属于用户权限下
     */
    ServiceResult<Boolean> checkUserGroupPermission(String userId, String groupId);

    /**
     * 批量校验用户组织层级权限
     *
     * @param userId  用户id
     * @param groupIds 组织id
     * @return true : 组织层级不存在、禁用、删除、隐藏、属于用户权限下
     */
    ServiceResult<Collection<String>> checkUserGroupPermissions(String userId, Collection<String> groupIds);

    /**
     * 批量校验用户组织层级权限
     *
     * @param userId  用户id
     * @param storeIds 组织id
     * @return true : 组织层级不存在、禁用、删除、隐藏、属于用户权限下
     */
    ServiceResult<Collection<String>> checkUserStorePermissions(String userId, Set<String> storeIds);

    /**
     * 获取该用户指定状态的层级列表
     *
     *
     * @param orgId
     * @param userId
     * @param status
     * @return
     */
    List<String> getGroupIdsByUserIdAndStatus(String orgId, String userId, int status);

    /**
     * 获取 store 的子节点
     *
     * @param store
     * @return
     */
    List<String> listByParentIn(String store);
}
